package com.daoliuhe.scaffold.mapper;

import com.daoliuhe.scaffold.model.ListEntry;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

@Mapper
public interface ListEntryMapper {
    /**
     * 根据主键删除列表项
     * @param id
     * @return
     */
    int deleteByPrimaryKey(BigDecimal id);

    /**
     * 插入列表项
     * @param record
     * @return
     */
    int insert(ListEntry record);

    /**
     * 插入列表项，插入存在的值
     * @param record
     * @return
     */
    int insertSelective(ListEntry record);

    /**
     * 根据主键查询列表项
     * @param id
     * @return
     */
    ListEntry selectByPrimaryKey(BigDecimal id);

    /**
     * 根据列表的id,查询所有的列表项
     * @param id
     * @return
     */
    List<ListEntry> selectByListId(String id);

    /**
     * 根据列表的id以及父节点的id查询列表项
     * @param listId 列表的id
     * @param parentId 父节点额id
     * @return 列表项
     */
    List<ListEntry> selectChildren(@Param("listId") String listId, @Param("parentId") String parentId);

    /**
     * 根据列表的APIName查询所有的列表项
     * @param apiName
     * @return
     */
    List<ListEntry> selectByListApiName(String apiName);

    /**
     * 根据列表的APIName查询所有的列表项(包含禁用和所有父级)
     */
    List<ListEntry> selectAllByListApiName(String apiName);

    /**
     * 根据列表项的APIName查询对应的列表项()
     */
    List<ListEntry> selectByEntryApiName(ListEntry record);

    /**
     * 更新列表项，只更新选中的值
     * @param record
     * @return
     */
    int updateByPrimaryKeySelective(ListEntry record);

    /**
     * 更新列表项
     * @param record
     * @return
     */
    int updateByPrimaryKey(ListEntry record);

    /**
     * 批量保存
     * @param list
     * @return
     */
    int saveBatchValues(List<ListEntry> list);

    /**
     * 根据条件查询列表项
     * @param record
     * @return
     */
    List<ListEntry> selectByEntryValue(ListEntry record);

    /**
     * 根据条件查询id不是当前的列表值,其他查询条件过滤
     * 判断重复的列表项
     * @param record 如果id为空，则是根据其他过滤条件查询
     * @return
     */
    List<ListEntry> selectOtherByEntryValue(ListEntry record);

    /**
     * 查询一层的列表值
     * @param record
     * @return
     */
    List<ListEntry> getOneLevelPageData(ListEntry record);

    /**
     * 查询一层的列表数量
     * @param record
     * @return
     */
    int getOneLevelPageCount(ListEntry record);

    /**
     * 根据子节点查询所有的上级节点
     * @param id
     * @return
     */
    List<ListEntry> selectParents(int id);

    /**
     * 根据列表的APIName查询所有的列表项
     *
     * @param record
     * @return 列表项的集合
     */
    List<ListEntry> getListDataByAPIName(ListEntry record);

    /**
     * 分页查询
     * @param record
     * @return
     */
    List<ListEntry> getPageData(ListEntry record);

    /**
     * 分页查询总数
     * @param record
     * @return
     */
    int getPageCount(ListEntry record);

    /**
     * 层叠列表项分页数据
     *
     * @param record
     * @return
     */
    List<ListEntry> getCascadePageData(ListEntry record);
    /**
     *
     * 层叠列表项页数
     *
     * @param record
     * @return
     */
    int getCascadePageCount(ListEntry record);

    /**
     * 查询所有数据
     * @param record
     * @return
     */
    List<ListEntry> getAllData(ListEntry record);

    /**
     * 查询树数据
     * @param record
     * @return
     */
    List<ListEntry> selectTreeData(ListEntry record);

    /**
     * 根据多个列表项的id查询列表项的值
     *
     * @param ids 多个列表项id的集合
     * @return
     */
    List<String> selectEntryValuesByIds(List<String> ids);

    /**
     * 批量禁用
     */
    void updateBatchDisable(@Param("list") ArrayList<String> ids);

    /**
     * 批量启用
     */
    void updateBatchEnable(@Param("list") ArrayList<String> ids);

}